;;MACROS02.ASM
;;Demonstração de uso de MACROS com NASM
;;Macros com parâmetros e macros sem parâmetros
;;Macros que usam parâmetros devem
;;indicar o número de parâmetros
;;explicitamente, e cada parâmetro é referido dentro da macro
;;dessa forma:
;; %1 = primeiro parâmetro,
;; %2 = segundo parâmetro,
;; %3 = terceiro parâmetro e assim por diante.
;;Uma macro sem parâmetros deve usar parâmetro 0.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%macro pushx 0 ;salva regs AX,BX,CX e DX...
push dx ;na pilha (SS:SP)
push cx
push bx
push ax
%endmacro
%macro popx 0 ;recupera regs AX, BX, CX e DX...
pop ax ;da pilha (SS:SP)
pop bx
pop cx
pop dx
%endmacro
%macro PosicionaCursor 2 ;usa dois parâmetros
pushx ;salva regs usados
mov ah,2
mov dl,%1 ;coluna
mov dh,%2 ;linha
mov bh,0 ;página de v¡deo
int 0x10 ;chama interrupção do BIOS
popx ;recupera regs usados
%endmacro
%macro LimpaTela 1
pushx
xor ax,ax ;faz ah=0 e al =0
mov ah,6 ;função do BIOS: rolar tela
xor cx,cx ;ch=0,cl=0, canto esquerdo superior
mov dh,24 ;25 linhas (de 0 a 24)
mov dl,79 ;80 colunas (de 0 a 79)
mov bh,%1 ;atributo (cor)
int 0x10 ;chama interrupção do BIOS
popx
%endmacro
%macro ExibeMensagem 1
pushx
mov dx, %1
mov ah,9
int 0x21
popx
%endmacro
;;------- In¡cio do Programa --------------
org 0x100
LimpaTela 0x07 ;0x07: atributo normal
PosicionaCursor 0,12 ;Cursor: coluna 0,linha 12
ExibeMensagem Mensagem ;Exibe a mensagem
int 0x20 ;Termina programa .COM
;;;;;;;;;;;;;;;;;;
;dados do programa
;;;;;;;;;;;;;;;;;;
Mensagem db 10,13,"Esta mensagem também será exibida por uma MACRO"
db 10,13,"$"
|